import { ref } from "vue";
import { useUserStore } from "../../stores/User";
import config from "./config.js";

const getBaseUrl = () => {
  return config.baseUrl; // 直接使用配置中的 baseUrl
};

export function useRequest() {
  const loading = ref(false);
  const appStore = useUserStore();

  const request = async (config) => {
    // 合并配置
    const baseUrl = getBaseUrl();
    let finalUrl = config.url.startsWith("http")
      ? config.url
      : `${baseUrl}${config.url.startsWith("/") ? "" : "/"}${config.url}`;

    console.log("完整请求 URL:", finalUrl);
    const mergedConfig = {
      url: finalUrl,
      timeout: 150000,
      header: {
        "Content-Type": "application/json",
        "X-Requested-With": "XMLHttpRequest",
        "X-Client-Platform": uni.getSystemInfoSync().platform,
      },
      method: config.method,
      data: config.data,
      showLoading: config.showLoading,
    };

    // 请求拦截
    if (appStore.token) {
      mergedConfig.header.Authorization = `Bearer ${appStore.token}`;
    }

    // 显示加载状态
    if (mergedConfig.showLoading) {
      loading.value = true;
      uni.showLoading({
        title: "加载中...",
        mask: true,
      });
    }

    try {
      const response = await uni.request(mergedConfig);

      // 响应拦截
      if (response.statusCode === 401) {
        handleUnauthorized();
        throw new Error("登录状态已过期");
      }

      if (response.statusCode >= 400) {
        throw new Error(`请求失败: ${response.data.message}`);
      }

      return response.data;
    } catch (error) {
      // 统一错误处理
      // handleRequestError(error, mergedConfig)
      throw error;
    } finally {
      if (mergedConfig.showLoading) {
        loading.value = false;
        uni.hideLoading();
      }
    }
  };

  return {
    request,
    loading,
  };
}

// 处理未授权情况
function handleUnauthorized() {
  const appStore = useAppStore();
  appStore.clearToken();

  // 跳转到登录页（不同平台处理）
  // #ifdef H5 || APP
  uni.navigateTo({
    url: "/pages/login/login",
  });
  // #endif

  // #ifdef MP-WEIXIN
  uni.reLaunch({
    url: "/pages/login/login",
  });
  // #endif
}

// // 错误处理
// function handleRequestError(error, config) {
// 	console.error('请求错误:', error)

// 	// 不显示静默请求的错误
// 	if (config.silent) return

// 	let message = '网络请求失败'

// 	if (error.errMsg.includes('timeout')) {
// 		message = '请求超时，请检查网络'
// 	} else if (error.errMsg.includes('network')) {
// 		message = '网络不可用，请检查连接'
// 	}

// 	uni.showToast({
// 		title: message,
// 		icon: 'none',
// 		duration: 3000
// 	})
// }
